import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * 登录功能实现
 * 使用预编译SQL执行SQL语句,防止SQL注入攻击.
 * 1.将需要执行的SQL语句,发送给数据库,让数据库理解SQL语句的执行意图[?代表占位符];
 *   SELECT nickname FROM userinfo WHERE username=? AND password=?
 * 2.创建预编译SQL执行对象[将SQL语句发送给数据库]
 *   connection.createPrepareStatement(sql);
 * 3.设置预编译SQL语句中 占位符? 的值;
 * 4.执行SQL语句 executeQuery() | executeUpdate().
 */

public class JDBCLogin2 {
    public static void main(String[] args) {
        //1.接收用户输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();
        System.out.println("请输入密码:");
        String password = scanner.nextLine();

        //2.数据库操作
        try (Connection connection = DBUtil.getConnection();){
            /*
                1.创建预编译SQL执行对象
                2.设置 ? 的值
                3.执行SQL语句
                4.处理查询结果
             */
            String sql = "SELECT nickname FROM userinfo WHERE username=? AND password=?";
            //注意:参数为预编译SQL语句
            PreparedStatement ps1 = connection.prepareStatement(sql);
            ps1.setString(1, username);
            ps1.setString(2, password);
            //注意:执行方法中不需要再添加参数
            ResultSet rs1 = ps1.executeQuery();

            //处理查询结果
            if (rs1.next()){
                String nickname = rs1.getString("nickname");
                System.out.println("欢迎你:" + nickname);
            }else{
                System.out.println("用户名或密码错误");
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}








